import Vue from 'vue'
import App from './App'
// 状态管理
import store from './store'
// 请求封装
import api from './common/request/request'
import sysConfig from './common/config/config'
// 工具类
import date2Lunar from './utils/date2Lunar'
import tool from './utils/tool'
import login from './utils/login'
// 小程序分享的mixin封装
import mpShare from './common/mixin/mpShare'
Vue.mixin(mpShare)

Vue.config.productionTip = false
Vue.prototype.$api = api // Request
Vue.prototype.$rooturl = sysConfig.rooturl // rooturl
Vue.prototype.$store = store // store


Vue.prototype.$date2Lunar = date2Lunar

/**
 * 全局方法
 * 
 * @method $msg 全局提示
 * @method $prePage 页面栈
 * @method $sysInfo 系统信息
 * @method $go 通用页面跳转
 * @method $redi 通用页面重定向
 * @method $goBack 通用返回上步
 * @method $wxPayment 微信支付
 * @method $getLocation 获取用户位置经纬度信息
 * @method $time2Lunar 时间转换为时辰
 * @method $getDate 获取指定或当前时间
 * @method $printLog 打印结果
 * @method $isNullOrEmpty 判断是否为null, undefined, ''
 * @method $isEmptyObj 判断是否为空对象
 * 
 */

Vue.prototype.$tool = tool

/**
 * 登陆权限全局方法
 * 
 * @method $auth 授权登录
 * @method $isLogin 校验是否登录 >> 废弃, 现使用store的isLogin做校验
 * @method $goAuth 跳转到登录页
 * 
 */

Vue.prototype.$login = login

// 配置请求
api.setConfig({
	baseUrl: sysConfig.appurl,
	debug: sysConfig.debug
})
// 请求拦截
api.interceptor.request = (config => {
	// 给header添加全局请求参数token
	if (!config.header.token || !config.header.wanlshop) {
		let login = uni.getStorageSync('FR|Token')
		if (login) {
			config.header.token = uni.getStorageSync('FR|Token')
		}
		// #ifdef APP-PLUS
		config.header.uuid = plus.device.uuid
		// #endif 
		// 设置语言
		config.header['Accept-Language'] = 'zh-CN,zh;q=0.9'
	}
	// 添加一个自定义的参数，默认异常请求都弹出一个toast提示
	if (config.toastError === undefined) {
		config.toastError = true
	}
	return config
})

/**
 * 全局的业务拦截
 */
api.interceptor.response = ((res, config) => {
	if (res.code === 1) {
		res.success = true
	} else if (res.code === 401) { // token失效，需要重新登录
		go('/pages/login/wechatLogin')
	}
	// sysConfig.debug?console.log(res):''
	return res
})

/**
 * 全局错误提示
 * 
 * @statusCode 200 业务错误
 * @statusCode 401 没有登录
 * @statusCode 403 没有权限
 * @statusCode 404 找不到文件
 * @statusCode 500 服务器内部错误
 */
api.interceptor.fail = ((res, config) => {
	var error = ''
	//业务错误、没有登录、没有权限
	if (res.statusCode === 200) {
		error = res.data.msg
	} else if (res.statusCode === 401) {
		error = res.data.msg
	} else if (res.statusCode === 403) {
		error = res.data.msg
	} else if (res.statusCode === 404) {
		error = 'API接口不存在'
	} else if (res.statusCode === 500) {
		error = 'API接口异常'
	} else {
		error = '服务器繁忙'
	}
	if (res.errMsg == 'request:fail abort statusCode:-1') {
		// sysConfig.debug?console.log(res) : ''
	}else{
		config.toastError ? msg(error) : ''
	}
	return res
})

App.mpType = 'app'

const app = new Vue({
    ...App
})
app.$mount()
